import BaseObject from "./baseObject.js";

/**
 * @description 基础控制器
 * @class {BaseController}
 * @extends {BaseObject} 基础对象
 * @author hhx
 * @date 2024-12-1 12:12
 * @version 0.1.2
 */
class BaseController extends BaseObject {

    /**
     * @description 定义模型
     * @private
     * @type {BaseModel}
     */
    _model = null;

    /**
     * @description 定义视图对象
     * @private
     * @type {HTMLElement}
     */
    _dom = null;


    /**
     * @description 基础控制器 构造函数
     * @param {object} props
     */
    constructor(props) {
        super(props);
    }

    /**
     * @description 基础控制器 实例化方法
     * @public
     * @method
     * @param {object} props 配置对象
     */
    static instance(props = {}) {

        const instance = new BaseController(props);
        instance.init(props);
        return instance;

    }

    //=================================== 成员定义 =======================================

    /**
     * @description 获取 基础模型
     * @member
     * @protected
     * @returns {BaseModel|*} 基础模型
     */
    get model() {
        return this._model;
    }

    /**
     * @description 设置 基础模型
     * @member
     * @protected
     * @param value {BaseModel|*} 基础模型
     */
    set model(value) {
        this._model = value;
    }

    /**
     * @description 获取 视图对象
     * @member
     * @protected
     * @returns {HTMLElement} 视图对象
     */
    get dom() {
        return this._dom;
    }

    /**
     * @description 设置 视图对象
     * @member
     * @protected
     * @param {HTMLElement} value 视图对象
     */
    set dom(value) {
        this._dom = value;
    }

    //=================================== 成员方法 =======================================

    /**
     * @description 获取 基础模型
     * @public
     * @returns {BaseModel} 基础模型
     */
    getModel() {
        return this.model;
    }

    /**
     * @description 设置 基础模型
     * @public
     * @param value {BaseModel|*} 基础模型
     */
    setModel(value) {
        this.model = value;
    }

    /**
     * @description 是否存在 基础模型
     * @public
     * @returns {boolean} true 是 false 否
     */
    hasModel() {
        return this.isNotNull(this.model);
    }

    /**
     * @description 获取 视图对象
     * @public
     * @returns {HTMLElement|*} 视图对象
     */
    getDom() {
        return this.dom;
    }

    /**
     * @description 设置 视图对象
     * @public
     * @param value {BaseModel|*} 视图对象
     */
    setDom(value) {
        this.dom = value;
    }

    /**
     * @description 是否存在 视图对象
     * @public
     * @returns {boolean} true 是 false 否
     */
    hasDom() {
        return this.isNotNull(this.dom);
    }

    //=================================== 属性定义 =======================================

    //=================================== 属性方法 =======================================

    //=================================== 接口方法 =======================================


    //=================================== 构造方法 =======================================

    //=================================== 内部方法 =======================================

    /**
     * @description 重载方法
     * @protected
     * @override
     */
    init(props) {
        super.init(props);
    }
}

export default BaseController;

